/**
 * 
 */
Ext.define('YX.core.Service', {
	extend : 'Ext.panel.Panel',
	layout : 'border',
	gridLog : null,
	pelLog : null,
	gridPerformance : null,
	txtServiceName : null,
	txtUser : null,
	cmbIsException : null,
	fcFromDate : null,
	dfFromDate : null,
	tfFromTime : null,
	fcToDate : null,
	dfTodate : null,
	tfToTime : null,
	txtNodeName : null,
	frmSearch : null,
	btnSearch : null,
	btnReset : null,
	tabCenter : null,
	initComponent : function() {
		this.gridLog = Ext.create('Ext.grid.Panel', {
			  flex : 1,
			  columns : [{
				    text : T.label.organization,
				    dataIndex : 'moduleOrgCode',
				    width : 80
			    }, {
				    text : T.label.serviceName,
				    dataIndex : 'moduleName',
				    width : 300
			    }, {
				    text : T.label.error,
				    dataIndex : 'moduleException',
				    width : 40
			    }, {
				    text : T.label.createUser,
				    dataIndex : 'operUser',
				    width : 80
			    }, {
				    text : T.label.host,
				    dataIndex : 'hostName',
				    width : 200
			    }, {
				    text : T.label.node,
				    dataIndex : 'nodeName',
				    width : 150
			    }, {
				    text : T.label.fromDate,
				    dataIndex : 'startDate',
				    width : 150,
				    xtype : 'datecolumn',
				    format : 'Y-m-d H:i:s'
			    }, {
				    text : T.label.toDate,
				    dataIndex : 'endDate',
				    width : 150,
				    xtype : 'datecolumn',
				    format : 'Y-m-d H:i:s'
			    }],
			  store : {
				  fields : ['id', 'moduleOrgCode', 'moduleName', 'moduleException',
				    'operUser', 'hostName', 'nodeName', {
					    name : 'startDate',
					    dateFormat : 'YmdHis',
					    type : 'date'
				    }, {
					    name : 'endDate',
					    dateFormat : 'YmdHis',
					    type : 'date'
				    }],
				  proxy : {
					  type : 'zbusrpc',
					  module : 'BasViewServiceLogService',
					  reader : {
						  root : 'logList'
					  }
				  }
			  },
			  listeners : {
				  scope : this,
				  select : this.gridLogSelect
			  }
		  });

		this.pelLog = Ext.create('Ext.panel.Panel', {
			  title : T.label.log,
			  layout : 'border',
			  itemId : 'log',
			  items : [{
				    xtype : 'panel',
				    split : true,
				    region : 'center',
				    layout : {
					    type : 'vbox',
					    align : 'stretch'
				    },
				    minWidth : 100,
				    items : [this.gridLog],
				    dockedItems : [{
					      xtype : 'pagingtoolbar',
					      store : this.gridLog.getStore(),
					      dock : 'bottom',
					      displayInfo : true
				      }]
			    }, {
				    xtype : 'panel',
				    layout : {
					    type : 'vbox',
					    align : 'stretch'
				    },
				    region : 'east',
				    width : 350,
				    minWidth : 100,
				    split : true,
				    items : [{
					      xtype : 'panel',
					      layout : 'fit',
					      flex : 1,
					      title : T.label.request,
					      items : [{
						        itemId : 'taReq',
						        xtype : 'textareafield',
						        flex : 1
					        }]
				      }, {
					      xtype : 'panel',
					      layout : 'fit',
					      flex : 1,
					      title : T.label.response,
					      items : [{
						        itemId : 'taRes',
						        xtype : 'textareafield',
						        flex : 1
					        }]
				      }]
			    }]
		  });

		this.gridPerformance = Ext.create('Ext.grid.Panel', {
			  title : T.label.performance,
			  itemId : 'performance',
			  columns : [{
				    text : T.label.serviceName,
				    dataIndex : 'moduleName',
				    width : 300
			    }, {
				    text : T.label.node,
				    dataIndex : 'nodeName',
				    width : 200
			    }, {
				    text : T.label.minSecond,
				    dataIndex : 'minSec',
				    width : 80
			    }, {
				    text : T.label.maxSecond,
				    dataIndex : 'maxSec',
				    width : 80
			    }, {
				    text : T.label.avgSecond,
				    dataIndex : 'avgSec',
				    width : 80
			    }, {
				    text : T.label.totalSecond,
				    dataIndex : 'totalSec',
				    width : 80
			    }, {
				    text : T.label.fromDate,
				    dataIndex : 'fromDate',
				    width : 150,
				    xtype : 'datecolumn',
				    format : 'Y-m-d H:i:s'
			    }, {
				    text : T.label.toDate,
				    dataIndex : 'toDate',
				    width : 150,
				    xtype : 'datecolumn',
				    format : 'Y-m-d H:i:s'
			    }],
			  store : {
				  fields : ['moduleName', 'nodeName', 'minSec', 'maxSec', 'avgSec',
				    'totalSec', {
					    name : 'fromDate',
					    dateFormat : 'YmdHis',
					    type : 'date'
				    }, {
					    name : 'toDate',
					    dateFormat : 'YmdHis',
					    type : 'date'
				    }],
				  proxy : {
					  type : 'zbusrpc',
					  module : 'BasViewServicePerformanceService',
					  reader : {
						  root : 'performanceList'
					  }
				  }
			  }
		  });

		this.tabCenter = Ext.create('Ext.tab.Panel', {
			  region : 'center',
			  split : true,
			  items : [this.pelLog, this.gridPerformance]
		  });

		// search
		this.txtServiceName = Ext.create('Ext.form.field.Text', {
			  fieldLabel : T.label.serviceName,
			  labelWidth : 80,
			  anchor : '98%',
			  name : 'moduleName'
		  });

		this.txtUser = Ext.create('Ext.form.field.Text', {
			  fieldLabel : T.label.createUser,
			  labelWidth : 80,
			  anchor : '98%',
			  name : 'operUser'
		  });

		this.cmbIsException = Ext.create('Ext.form.field.ComboBox', {
			  editable : false,
			  labelWidth : 80,
			  anchor : '98%',
			  fieldLabel : T.label.exception,
			  valueField : 'key',
			  displayField : 'text',
			  queryMode : 'local',
			  store : Ext.create('Ext.data.Store', {
				    fields : ['key', 'text'],
				    data : [{
					      "key" : "",
					      "text" : ""
				      }, {
					      "key" : "Y",
					      "text" : T.label.yes
				      }, {
					      "key" : "N",
					      "text" : T.label.no
				      }]
			    })
		  });

		this.txtNodeName = Ext.create('Ext.form.field.Text', {
			  labelWidth : 80,
			  anchor : '98%',
			  fieldLabel : T.label.node
		  });

		this.dfFromDate = Ext.create('Ext.form.field.Date', {
			  flex : 1,
			  allowBlank : false,
			  format : 'Y-m-d',
			  listeners : {
				  scope : this,
				  blur : this.onDtFromDateBlur
			  }
		  });

		this.tfFromTime = Ext.create('Ext.form.field.Time', {
			  increment : 30,
			  format : 'H:i',
			  flex : 1
		  });
		this.fcFromDate = Ext.create('Ext.form.FieldContainer', {
			  layout : 'hbox',
			  labelWidth : 80,
			  anchor : '98%',
			  fieldLabel : T.label.fromDate,
			  items : [this.dfFromDate, this.tfFromTime]
		  });

		this.dfToDate = Ext.create('Ext.form.field.Date', {
			  flex : 1,
			  allowBlank : false,
			  format : 'Y-m-d',
			  listeners : {
				  scope : this,
				  blur : this.onDtToDateBlur
			  }
		  });

		this.tfToTime = Ext.create('Ext.form.field.Time', {
			  increment : 30,
			  format : 'H:i',
			  flex : 1
		  });
		this.fcToDate = Ext.create('Ext.form.FieldContainer', {
			  layout : 'hbox',
			  fieldLabel : T.label.toDate,
			  labelWidth : 80,
			  anchor : '98%',
			  items : [this.dfToDate, this.tfToTime]
		  });

		this.btnSearch = Ext.create('Ext.button.Button', {
			  text : T.label.search,
			  itemId : 'btnSearch',
			  iconCls : 'icon-find',
			  scope : this,
			  handler : this.onBtnSearchClicked
		  });
		this.btnReset = Ext.create('Ext.button.Button', {
			  text : T.label.reset,
			  itemId : 'btnReset',
			  iconCls : 'icon-clear',
			  scope : this,
			  handler : this.onBtnResetClicked
		  });

		this.frmSearch = Ext.create('Ext.form.Panel', {
			  title : T.label.search,
			  split : true,
			  region : 'east',
			  width : 300,
			  bbar : {
				  items : [this.btnSearch, this.btnReset]
			  },
			  items : [this.txtServiceName, this.txtUser, this.cmbIsException,
			    this.txtNodeName, this.fcFromDate, this.fcToDate]
		  });

		this.items = [this.tabCenter, this.frmSearch];

		this.callParent();
	},
	onBtnSearchClicked : function() {
		var reqData = {
			moduleName : this.txtServiceName.getValue(),
			operUser : this.txtUser.getValue(),
			isException : this.cmbIsException.getValue(),
			fromDate : null,
			toDate : null,
			nodeName : this.txtNodeName.getValue()
		};

		if (this.dfFromDate.getValue()) {
			var dtFrom = this.dfFromDate.getValue();
			dtFrom.setHours(0, 0, 0);
			if (this.tfFromTime.getValue()) {
				var tmFrom = this.tfFromTime.getValue();
				dtFrom.setHours(tmFrom.getHours(),tmFrom.getMinutes(), tmFrom.getSeconds());
			}
			reqData.fromDate = dtFrom;
		}

		if (this.dfToDate.getValue()) {
			var dtTo = this.dfToDate.getValue();
			dtTo.setHours(23, 59, 59);
			if (this.tfToTime.getValue()) {
				var tmTo = this.tfToTime.getValue();
				dtTo.setHours(tmTo.getHours(),tmTo.getMinutes(), tmTo.getSeconds());
			}
			reqData.toDate = dtTo;
		}

		if (this.tabCenter.getActiveTab().getItemId() === 'log') {
			this.dfFromDate.clearInvalid();
			this.dfToDate.clearInvalid();

			this.gridLog.getStore().getProxy().extraParams = reqData;
			this.gridLog.getStore().loadPage(1);
		} else {
			if (!this.frmSearch.isValid()) {
				return;
			}

			this.gridPerformance.getStore().load({
				  params : reqData
			  });
		}
	},
	onBtnResetClicked : function() {
		this.frmSearch.getForm().reset();
	},
	gridLogSelect : function(grid, record, index) {
		var me = this;
		YX.ZbusRpc.request({
			  module : 'BasViewServiceLogService',
			  showFail : false,
			  params : {
				  id : record.get('id'),
				  needDetail : 'Y'
			  },
			  success : function(rsp) {
				  if (!Ext.isEmpty(rsp.logList)) {
					  me.pelLog.down('#taReq').setValue(rsp.logList[0].moduleIn);
					  me.pelLog.down('#taRes').setValue(rsp.logList[0].moduleOut);
				  } else {
					  me.pelLog.down('#taReq').setValue('');
					  me.pelLog.down('#taRes').setValue('');
				  }
			  },
			  fail : function() {
				  me.pelLog.down('#taReq').setValue('');
				  me.pelLog.down('#taRes').setValue('');
			  }
		  });
	},
	onDtFromDateBlur : function(field) {
		if (field.getValue()) {
			var dt = field.getValue();
			dt.setMonth(dt.getMonth() + 1);
			if (this.dfToDate.getValue()
			  && this.dfToDate.getValue().getTime() > dt.getTime()) {
				this.dfToDate.setValue(dt);
			}
		}
	},
	onDtToDateBlur : function(field) {
		if (field.getValue()) {
			var dt = field.getValue();
			dt.setMonth(dt.getMonth() - 1);
			if (this.dfFromDate.getValue()
			  && this.dfFromDate.getValue().getTime() < dt.getTime()) {
				this.dfFromDate.setValue(dt);
			}
		}
	}
});